package com.luojunchong.dubboconsumer.controller;

import com.luojunchong.dubboapi.module.User;
import com.luojunchong.dubboapi.service.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: luoJunChong
 * @Date: 2025/11/7 12:46
 */

/**
 * 提供 HTTP 接口，测试 Dubbo 服务调用
 */
@RestController
@RequestMapping("/api/hello")
public class HelloController {

    /**
     * @DubboReference：引用 Dubbo 远程服务（替代旧版 @Reference）
     * 1. version：必须与生产者一致（版本匹配）
     * 2. timeout：调用超时时间（建议与生产者一致）
     * 3. check：启动时是否检查服务（默认true，开发环境可设为false避免启动失败）
     */
    @DubboReference(
            version = "1.0.0",
            timeout = 3000,
            check = false // 开发环境关闭启动检查（生产环境建议开启）
    )
    private HelloService helloService;

    // 测试简单字符串接口
    @GetMapping("/say/{name}")
    public String sayHello(@PathVariable String name) {
        // 调用 Dubbo 远程服务
        return helloService.sayHello(name);
    }

    // 测试自定义模型接口（POST 请求）
    @PostMapping("/greet")
    public String greetUser(@RequestBody User user) {
        return helloService.greetUser(user);
    }
}